home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 3 / Gold Medal Software - Volume 3 (Gold Medal) (1994).iso / stats / lsqrft15.arj / FIT.TEX < prev    next >
Text File  |  1994-02-11  |  34KB  |  845 lines

  1. \documentstyle[12pt,fullpage]{article}
  2. \title{FIT2.EXE User's Guide}
  3. \author{Michael Courtney}
  4.  
  5. \begin{document}
  6.  
  7. \maketitle
  8. \newpage
  9.  
  10. \tableofcontents
  11.  
  12. \newpage
  13. \section{Installation}
  14.  
  15.  Unzip the zip file in a suitable directory.  Move
  16.  {\em fit2.exe} somewhere in your path.  If you want the online
  17.  help to work, set the environment variable {\em fithelp} to
  18.  point to the file {\em fit.hlp}.  For example:\\
  19.  \begin{verbatim}
  20.  set fithelp=d:\docs\fit.hlp
  21.  \end{verbatim}
  22.  Under Unix, you should use setenv, something like:\\
  23.  \begin{verbatim}
  24.  setenv FITHELP /u/docs/fit.hlp
  25.  \end{verbatim}
  26.  Adding the line to your {\em config.sys} (under OS/2) or 
  27.  {\em autoexec.bat} (under DOS) or .cshrc would keep you from 
  28.  having to type it in every time you reboot or login.  
  29.  The gnuplot.exe program should be somewhere in your path.
  30.  The fit program requires you have {\em gplt33b2.zip} or later
  31.  under OS/2.  Earlier versions work under Unix. This file 
  32.  is available from ftp.cdrom.com and includes complete 
  33.  documentation.  As of 2/11/94 the most recent version of
  34.  gnuplot is 3.5.
  35.  
  36.  For use on platforms other than OS/2 2.x or DOS, you will
  37.  have to compile. Have a look at the makefile and make it 
  38.  suitable for your compiler. You might want to make the 
  39.  executable {\em fit2} instead of {\em fit2.exe}. You should also use 
  40.  the compiler option -DUNIX (instead of -DOS2), or whatever
  41.  option will define UNIX for your compiler.  I recommend
  42.  using the GCC compiler for the most painless compilation
  43.  on any UNIX platform, but other compilers have been shown
  44.  to work as well.  You might get some warnings.
  45.  
  46.  Under OS/2 2.x, you should move the *.DLL files to a directory
  47.  in your LIBPATH.
  48.  
  49.  Under DOS, you should use the DJGPP port of GCC.  Borland 
  50.  C++ will not work.  To run in a DOS box under Windows, you
  51.  must use version 1.10 or higher of DJGPP.  Specify the 
  52.  -DDOS option when you compile under DOS.  Plotting is 
  53.  disabled in the DOS version.  You will have to write the 
  54.  fit to a temporary file, and plot with the plotting 
  55.  package of your choice.  DJGPP is not the most usable DOS 
  56.  compiler, but it is free, has a 32 bit DOS extender, and 
  57.  is good for porting UNIX programs.  Consult the DJGPP 
  58.  documentation and the *.msdos.programmer newsgroups for 
  59.  more info on DJGPP.  You must have the file {\em go32.exe} in 
  60.  your path for the DOS version to work.
  61.  
  62.  -DUNIX affects the command used to open gnuplot.  Gnuplot
  63.  writes some error messages to stderr and some of these 
  64.  make it to the screen.  If -DUNIX is specified, stderr is 
  65.  redirected to the file gnuout.  If you want to see the 
  66.  error messages, do not use -DUNIX.  Additionally, some 
  67.  gnuplot terminal types require stderr to go to the screen.
  68.  If you have one of these, do not specify -DUNIX; you will 
  69.  have to live with the gnuplot error messages.  This is the
  70.  case for {\em tek40xx} and similar terminal types.  If the -DUNIX option is not
  71.  specified, temporary files will be written to the current 
  72.  directory rather than {\em /tmp}.
  73.  
  74. \section{General}
  75.  
  76.  {\em fit2} is a non-linear least-squares fitting program. It uses
  77.  the Levenberg-Marquardt method to attempt to minimize the 
  78.  least-squares error between a data file and a model 
  79.  function.  See the books, {\bf Data Reduction and Error Analysis
  80.  in the Physical Sciences} by P. R. Bevington and {\bf Numerical 
  81.  Recipes in C} by W. H. Press et. al. for more information 
  82.  on this method.
  83.  
  84.  Due to the generality of the fitting function allowed,
  85.  and the possible weirdness of the error function in
  86.  parameter space, convergance to the true minimum is not
  87.  guaranteed.  Therefore, it is important to have good
  88.  initial guesses for the parameters.  It is a good idea to 
  89.  graph your data and the fitting function with your
  90.  initial guesses, and tweak the initial guesses until the 
  91.  fitting function is close to the data.  Most functions
  92.  with three or four parameters will converge quickly if the
  93.  initial guesses are in the right ballpark.  If you have 
  94.  more than four parameters, you may have to tell the program
  95.  to vary only four at a time (the {\bf sp} command).  When the 
  96.  parameters you are varying affect a subset of the data 
  97.  much more than the rest, you should window the data 
  98.  accordingly (the {\bf wi} command). If these tricks do not work, 
  99.  check and make sure that the function is computing the 
  100.  proper value of the function and derivatives with respect 
  101.  to the parameters.  You have to check your source for this. 
  102.  A sign error is disasterous.  It will cause the guess for 
  103.  the parameter to be further from the correct value than 
  104.  the current value.
  105.  
  106.  The Levenberg-Marquardt method will work for functions
  107.  which are linear in the parameters.  It is not as fast as 
  108.  linear regression, and it is not guaranteed to converge to
  109.  an absolute minimum.  However, it will do in a pinch and
  110.  it is actually a little more robust if your basis functions 
  111.  are nearly linearly dependent.  Of course, if your basis 
  112.  functions are nearly linearly independent then your 
  113.  parameters will be strongly correlated, and you will have 
  114.  to sort what is meaningful and what is not.
  115.  
  116.  This program was written by Michael Courtney.  I consider 
  117.  this a beta version of the program.  I retain all rights 
  118.  to the program. You may use the program and alter the 
  119.  source to fit your needs. You may not distribute altered 
  120.  source or executable unless you obtain my permission.  You 
  121.  may port this program to other platforms if you wish.  It 
  122.  should compile and run almost unaltered on the NeXT 
  123.  platform and most Unix platforms.  You may not sell the 
  124.  program or source or receive any money for its 
  125.  distribition.  The program is provided {\em as is} and is 
  126.  without warranty of guarantee of any kind.  The author 
  127.  assumes no responsibility of any kind for anything the 
  128.  program does.
  129.  
  130.  Please report bugs and suggestions to Michael Courtney
  131.  at michael@amo.mit.edu.  I will consider bugs to have
  132.  a higher priority than suggestions, although suggestions 
  133.  are welcome.
  134.  
  135.  I am considering the following future enhancements to the
  136.  program:
  137.  
  138. \begin{itemize}
  139. \item Multiple data sets -- the ability to simultaneously fit 
  140.  multiple data sets to different functions which share 
  141.  common parameters.  Currently, you can effectively 
  142.  accomplish this, see Multiple Data Sets.
  143.  
  144. \item Ability to handle binary files.
  145.  
  146. \item  Command line history.
  147.  
  148. \end{itemize}
  149.  
  150.   Please let me know if any of these enhancements are of 
  151.  interest to you.
  152.  
  153. \section{Improvements}
  154.  
  155.  This is the 1.5 beta version of the program.
  156.  
  157.  The improvements over the 1.4 beta are the following:
  158.  
  159. \begin{itemize}
  160. \item Can now take commands from a file.  See the {\bf do} command.
  161. \item Can now use the Cset++ compiler under OS/2 2.x.
  162. \item Minor bug fixes.
  163. \item The {\bf noset} command.
  164. \end{itemize}
  165.  
  166.  
  167.  The improvements over the 1.3 beta are the following:
  168.  
  169. \begin{itemize}
  170. \item New plotting routine under OS/2 allows viewing
  171.  of a plot of every attempted fit.  See the {\bf fp} command.
  172. \item Minor bug fixes.
  173. \item A simple function for estimating errors in the parameters
  174. has been added.
  175. \end{itemize}
  176.  The improvements over the 1.2 beta are the following:
  177. \begin{itemize}
  178. \item Linear Least-Squares Fitting
  179. \item Minor bug fixes.
  180. \item Can change one parameter at a time.  See the {\bf cp} command.
  181. \end{itemize}
  182.  
  183. \section{Files}
  184.  
  185.         {\em fit2} opens and stores data in several files.
  186.  {\em fit.tmp} is used if the function is plotted to a file.
  187.  {\em fit.dat} is used as a default filename if none is specified
  188.  with the {\bf wf} command. The {\bf wp} command stores the parameters
  189.  in the file {\em a.dat}. In addition, the text output of gnuplot
  190.  which is sent to stderr is written in the file {\em gnuout}.
  191.  On non-unix machines, {\em fit2} does not erase any of these
  192.  files, unless it overwites them.  On UNIX machines {\em fit.tmp}
  193.  and {\em gnuout} are written in the {\em /tmp }.  They are
  194.  erased when the program exits, unless debugging is on.
  195.  If the debug flag is non-zero, lamda is written to a file
  196.  called {\em lamda.sts} on every successful iteration.  lamda
  197.  controls how much the paramerers are changed in attempting
  198.  to reduce $\chi^2$, and changing how lamda is chosen would be
  199.  one way to improve effeciency of the L-M algorithm.
  200.  
  201. \section{Commands}
  202.  
  203.         The following can be executed at the {\tt fit2>} prompt:
  204. \begin{description}        
  205. \item[help]
  206. \item[quit]
  207. \item[fn]      function
  208. \item[ip]      initialize parameters
  209. \item[cp]      change one parameter
  210. \item[sp]      select parameters (to vary)
  211. \item[gd]      get data
  212. \item[fi]      fit
  213. \item[pp]      print parameters
  214. \item[wp]      write parameters (to a file)
  215. \item[wf]      write fit (data to a file)
  216. \item[rp]      read parameters (from a file)
  217. \item[wt]      weight (for fitting)
  218. \item[co]      covariant matrix 
  219. \item[order]   order (of data colums in file)
  220. \item[ad]      allocate data array
  221. \item[lf]      lists functions available
  222. \item[gr]      graphing flag
  223. \item[plot]    plot data and fit
  224. \item[load]    load a gnuplot command file
  225. \item[set]     set something in gnuplot
  226. \item[wi]      windows data
  227. \item[ve]      changes verbosity
  228. \item[noset]   changes how {\it fit2} sends set commands to gnuplot.
  229. \item[pr]      plot residual errors
  230. \item[sh]      shows current settings
  231. \item[md]      makes data
  232. \item[de]      debug
  233. \item[ru]      run a program
  234. \item[gn]      sends a command to gnuplot
  235. \item[li]      linear least squares fit
  236. \item[pa]      pauses for a number of seconds
  237. \item[fp]      turns the use of fitplot.exe on and off
  238. \item[er]      estimates errors in the parameters
  239. \item[do]      executes commands in a file
  240. \end{description}
  241.  
  242. \subsection{fn}
  243.  
  244. {\bf Usage: } {\tt  fn name [\#]} \\
  245.  
  246. {\bf fn} chooses a function for fitting.  If the function has a
  247. variable number of parameters, the number of parameters
  248. can be entered after the function name.
  249. {\bf Example: } {\tt fn gauss} chooses to fit to a gaussian.
  250.  
  251. \subsection{ip}     {\bf Usage: } {\tt  ip a0 a1 a2 ...} \\
  252.  
  253.         {\bf ip} initializes the fitting parameters.  If the number 
  254.  of parameters changes, the
  255.  parameters are initialized to 5 when the {\bf fn} command is 
  256.  executed.  {\bf ip} can be used at any time to change the values 
  257.  of the parameters. If you want to leave some parameters 
  258.  unchanged,enter a * in place of the number.  You must enter 
  259.  either a number or a * for all of the parameters.
  260.  
  261.         {\bf Example: } {\tt ip 13.7 * 12} changes a0 to 13.7, leaves
  262.  a1 the same, and changes a2 to 12 for a three parameter fit.
  263.  
  264. \subsection{cp}        {\bf Usage: } {\tt  cp \# \#} \\
  265.  
  266.         {\bf cp } changes the parameter specified by the first
  267.  number to the value specified by the second number.  The 
  268.  first number must be in the range of parameters.
  269.  
  270.         {\bf Example:} {\tt cp 3 3.141} changes a3 to 3.141 and leaves
  271.  all the other parameters unchanged.
  272.  
  273. \subsection{sp}     {\bf Usage: } {\tt  sp \# \# \#} \\
  274.  
  275.         {\bf sp } selects which parameters to vary.  By default,
  276.  all parameters are selected to be varied when the {\bf fn } 
  277.  command is executed.  If you only wanted to vary 
  278.  parameters a0 and a2 of a three parameter fit, you would 
  279.  issue the command:
  280.  
  281.         {\bf Example: } {\tt sp 0 2}
  282.  
  283. \subsection{gd}     {\bf Usage: } {\tt  gd filename} \\
  284.  
  285.         {\bf gd } geta the data from a file.  Data should be in an 
  286.  ascii file with between two and 20 columns. Actually, you can have
  287.  as many columns as you want in the file, but the program will only
  288.  read up to 20.  For fitting
  289.  functions of more than one independent variable, select a 
  290.  function with the number of independent variables that you 
  291.  want to fit to before reading in data.  This will allow the 
  292.  program to default to interpreting columns 1 through n 
  293.  (where n is the number of independent variables of the
  294.  current function) as representing the independent variables
  295.  in order.  By default, the (n+1)th column is interpreted to
  296.  be y(x0 ... xn) and the (n+2)th column is interpreted as 
  297.  the experimental error in the measured y.  If you wish to 
  298.  assign the columns in your data file differently, or if you
  299.  read in the data before choosing a function (for more than 
  300.  1 independent variable), you will have to use the {\bf order}
  301.  command.
  302.  
  303.  By default, if no function has been selected, or if a
  304.  function of one independent variable has been selected,
  305.  the first column is x, the second is y, and if there is a
  306.  third, it is assumed to be the error in y.  If you wish to
  307.  assign different columns to be x, y, and $\delta y$, use the
  308.  {\bf order} command.  By default, the program can handle a file
  309.  with five columns and 1024 rows.  The {\bf ad} command can be
  310.  used to allocate the data array differently and handle up 
  311.  to 23 columns and as many rows as memory allows.
  312.  
  313.  Lines in a data file beginning with the \verb+#+ character are taken
  314.  to be comments.
  315.  
  316.  
  317. \subsection{fi}     {\bf Usage: } {\tt  fi iterations} \\
  318.  
  319.         {\bf fi }fits the data using the non-linear fitting
  320.  algorithm. Iterations is the  number of iterations between 
  321.  plots.  If no number it given, it defaults the last number 
  322.  used.  If none was ever entered, it defaults to 20. After 
  323.  this number of iterations, the data and fit are plotted, if
  324.  graphing if selected.  (It is by default.  See the {\bf gr}
  325.  command.)  You are then given the option to quit iterating 
  326.  (q enter), continue iterating and turn on graphing 
  327.  (g enter), continue iterating and turn off graphing
  328.  (n enter), or continue with the same graphing status.  
  329.  
  330.  If the {\bf fi} command is executed from a command file, the
  331.  fit stops after the selected number of iterations and
  332.  does not prompt for user input.  This is to facilitate
  333.  batch processing.
  334.  
  335.  There is no way in general to be sure $\chi^2$ is at an 
  336.  absolute minimum. It might just be at a local minimum. 
  337.  Starting the fit with several sets of values of initial 
  338.  parameters and having every fit that converges find the 
  339.  same set of final values and same $\chi^2$ gives some 
  340.  confidence. Looking at the graph at least tells us we're 
  341.  not too far away.
  342.  
  343.  It is possible to estimate the errors in the parameters 
  344.  once $\chi^2$ is minimized.  Rather than build this into the
  345.  program for people to use with more confidence than
  346.  warranted, I merely make all the information you need
  347.  available. You should look at the references and figure it 
  348.  out.  This way you will have an idea of how unreliable 
  349.  error estimates on the parameters can be.
  350.  
  351. \subsection{li}      {\bf Usage: } {\tt  li} \\
  352.  
  353.         {\bf li} fits the data using a linear fitting algorithm.
  354.  No iteration is required since the best-fit parameters are
  355.  uniquely determined by the data and basis functions.  
  356.  The linear fitting
  357.  algorithm used is the simplest possible.  A matrix equation
  358.  is set up and solved by Gauss-Jordan elimination.  A
  359.  singular matrix will cause a failure of the method and
  360.  probably indicates a linearly dependent basis set.  
  361.  A near-singular matrix will cause inaccuracies in parameter values.  
  362.  
  363.  {\bf li} will usually work very well for less than 6 or so basis
  364.  functions and reasonably well for up to about 10 basis
  365.  functions. If you have problems with singular matrices,
  366.  doubt the accuracy of your parameters, or want to
  367.  incorporate errors in the independent parameters, I suggest
  368.  that you use {\bf li} to obtain initial guesses and then use
  369.  {\bf fi }for to find the final parameter values.  {\bf fi }will usually
  370.  converge quickly if you start with initial guesses obtained
  371.  from {\bf li}.
  372.  
  373.  You should be aware that fitting to a subset of parameters
  374.  with the {\bf sp } command has a different effect with {\bf li} than it
  375.  does with {\bf fi}.  With {\bf fi}, the selected parameters are varied
  376.  while the unselected parameters are held fixed.  With {\bf li},
  377.  the selected parameters really define which basis functions
  378.  are incorporated in the fit.  These are the only parameters
  379.  found,  the other parameters are set to zero.  This may be 
  380.  inconvenient in certain situations, but it reflects a basic 
  381.  difference between linear and non-linear fitting.
  382.  
  383. \subsection{pp}     {\bf Usage: } {\tt  pp} \\
  384.  
  385.         {\bf pp} prints the current value of the parameters to the
  386.  screen.
  387.  
  388. \subsection{wp}     {\bf Usage: } {\tt  wp filename mode} \\
  389.  
  390.         {\bf wp} writes the parameters to a file.  If no filename
  391.  is given, parameters are written to the file {\em a.dat}.  Mode
  392.  should be {\em a} (for append) or {\em w} (for overwrite).  The
  393.  default mode is {\em w}.
  394.  
  395.  {\bf Examples:  } \\
  396.  {\tt wp} writes the parameters to the file {\em a.dat}, overwriting
  397.  the file if it exists.  
  398.  
  399.  {\tt wp params.dat a} writes the parameters to the file
  400.  params.dat, appending then on to the end of the file if  it
  401.  already exists.
  402.  
  403. \subsection{wf}     {\bf Usage: } {\tt  wf filename} \\
  404.  
  405.         {\bf wf} writes the fitted data to a file, overwriting the
  406.  file if it exists.  If no filename is given, data is 
  407.  written to the file {\em fit.dat}.  The fitted data is the 
  408.  value of the fitting function evaluated at the value of x 
  409.  of the current data set using the current parameters.
  410.  
  411. \subsection{er}     {\bf Usage: } {\tt  er factor} \\
  412.  
  413.         {\bf er} provides a simple way to estimate the errors in the
  414.  parameters.  The algorithm is very simple, and the answer it
  415.  gives is intuitively satisfying, but not statistically rigorous.
  416.  The algorithm varies one parameter at a time and finds two
  417.  values of the parameter where chisqr is increased by the given
  418.  factor.  An increase of $10-20\%$ in chisqr should give a reasonable
  419.  estimate of the errors in the parameter, so I suggest a factor
  420.  of 1.1 or 1.2.  For factors larger than 2.0, the algorithm may
  421.  not converge, and you answers would not make sense as error
  422.  estimates on the parameters.
  423.  
  424.  
  425. \subsection{md}      {\bf Usage: } {\tt  md filenaeme xmin0 xmax0 xstep0 xmin1 xmax1 xstep1} \\
  426.  
  427.         {\bf md} makes a trial data set.  It's primary use is in
  428.  testing new fitting functions.  At this time, it is only 
  429.  implemented for functions of one or two independent 
  430.  variables.  The trial data set is created using the current
  431.  parameter values and the current fitting function.
  432.  
  433.  {\bf Examples:}
  434.  
  435. \begin{verbatim}
  436.  fit2> fn gauss        /* defines fitting function as gauss */
  437.  fit2> ip 5 1 1        /* initialized parameters */
  438.  fit2> md test 0 10 1  /* makes data for 0 <= x0 <= 10*/
  439.  fit2> gd test         /* reads in data */
  440.  fit2> ip 5.1 2 1      /* changes parameters */
  441.  fit2> fi              /* test to see if fit finds real parameters */
  442.  fit2> fn xyquad       /* defines fitting function as xyquad */
  443.  fit2> ip 5 5 5 5 5 5  /* initialized parameters */
  444.  fit2> md test 0 10 1 0 10 1
  445.                        /* makes data for 0 <= x0 <=10 and 0 <= x1 <= 10*/
  446.  fit2> gd test         /* reads in data */
  447.  fit2> ip 1 1 1 1 1 1  /* changes parameters */
  448.  fit2> fi              /* test to see if fit finds real parameters */
  449. \end{verbatim}
  450.  
  451. \subsection{rp}     {\bf Usage: } {\tt  rp filename} \\
  452.  
  453.         {\bf rp} reads the parameters from a file.  If no file is
  454.  given, it attempts to read the parameters from the file 
  455.  {\em a.dat}.
  456.  
  457. \subsection{de}      {\bf Usage: } {\tt  de flag} \\
  458.  
  459.         {\bf de} changes the debugging status of the program.
  460.  Flag is 0 for no debugging, 1 for light debugging, and 2
  461.  for heavy debugging. Only certain sections of code have
  462.  been set up for this.  Other sections will be set up as I 
  463.  need to debug them.  This option is intended mainly for 
  464.  use of someone altering the program. If the debugging level
  465.  is 1, all of the commands sent to gnuplot are printed, 
  466.  along with other information.
  467.  
  468. \subsection{sh}
  469.  
  470.         {\bf sh} shows the value of current settings.
  471.  
  472. \subsection{wt}     {\bf Usage: } {\tt  wt [none stat inst other]} \\
  473.  
  474.         The fitting function tries to minimize $\chi^2$, where
  475.  $\chi^2 = \sum {((y_i - f(x_i))/{\sigma}_i)}^2$.  That is, $\chi^2$
  476.  is the sum of the squared error of the difference between 
  477.  the data and the fitting function, except that each term in 
  478.  the sum is weighted by $\sigma_i^2$.  The {\bf wt} command chooses
  479.  the type of weighting.  It chooses what to use for $\sigma$.
  480.  Errors in the independent parameters can also be used for
  481.  non-linear fitting.  See the order command for details.
  482.         The following weighting options are available:
  483.  
  484.  none..........no weighting, all $\sigma$'s are equal to one.
  485.  
  486.  statistical...$\sigma_i = \sqrt{y_i}$
  487.  
  488.  instrumental..$\sigma_i = \delta y_i$, as in data file
  489.  
  490.  other.........$\sigma_i = y_i$
  491.  
  492.         {\bf Example: } {\tt  wt s} selects statistical weighting.
  493.  
  494. \subsection{co}     {\bf Usage: } {\tt  co filename} \\
  495.  
  496.         {\bf co} prints the covariant matrix.  It will overwrite
  497.  the file if a file of the same name exists.  If no filename
  498.  is given, the covariant matrix is written to the screen. 
  499.  The covariant matrix can be used to estimate the error of
  500.  the fit parameters.
  501.  
  502. \subsection{order}   {\bf Usage: } {\tt  order x0col ... xncol ycol $\sigma_y$col $\sigma_{x0}$col ... $\sigma_{xn}$col}
  503.  
  504.         {\bf order} assigns significance to the columns in the
  505.  internal data matrix.  When a data file is read with the {\bf gd } 
  506.  command, the first column in the file is stored in the 
  507.  data[0].  (The 0th column of an 2-D array).  The second 
  508.  column is stored in data[1], etc.  By default, these columns
  509.  are interpteted in a certain way (See the {\bf gd } command).  The
  510.  {\bf order} command is used to change the default behavior.
  511.  
  512.  Errors in the independent variables can be used in the fit 
  513.  by using techniques of error propagation to calclate a 
  514.  corresponding error in y.  That is:
  515. \begin{displaymath}
  516.  \sigma_y = \sqrt{ \sigma_y^2 + \sigma_x^2 \frac{dy}{dx}^2 }.
  517. \end{displaymath}
  518.  Each data point has its own value of $\sigma_x$ and $\sigma_y$.
  519.  Each $\sigma_x$ must be in a column in the data file.  The
  520.  weighting for $\sigma_y$ should be statistical, instrumental or
  521.  other if $\sigma_x$ is considered in the fit.  You should not
  522.  select no weighting if you want to use $\sigma_x$.  If the {\bf order}
  523.  command selects a column to be $\sigma_x$, then this information
  524.  is used for the fit.  If you wish to not use this 
  525.  information, assign $\sigma_x$col to be -1 (the default value).
  526.         If the fitting algorithm has a problem converging
  527.  when using $\sigma_x$, try the fit without using $\sigma_x$.  Then take
  528.  those parameters as the initial parameters for the fit 
  529.  considering $\sigma_x$. Note that errors in the independent
  530.  variables are not considered during linear least squares 
  531.  fitting.
  532. \\
  533.  
  534.  {\bf Examples for one independent variable:}\\
  535.  
  536.  {\tt order 2 1 0}  x0 is the third column in the file, y is the
  537.  second column, $\sigma_y$ is the first column.
  538.  
  539.  {\tt order 1 4} x0 is the second column, y is the fifth column,
  540.  $\sigma_y$ is not specified.
  541.  
  542.  {\tt order 0 1 2 3} x0 is the first column in the file, y is
  543.  the second column, $\sigma_y$ is the third column, $\sigma_{x0}$ is the
  544.  fourth column and is used in the fit.
  545.  
  546.  {\tt order 0 1 2 -1} x0 is the first column in the file, y is
  547.  the second column, $\sigma_y$ is the third column, $\sigma_{x0}$ is not
  548.  used.
  549. \\
  550.  
  551.  {\bf Examples for two independent variables:}\\
  552.  
  553.  {\tt order 2 1 0 3}  x0 is the third column in the file, x1 is
  554.  the second column, y is the first column, $\sigma_y$ is the
  555.  third column.
  556.  
  557.  {\tt order 1 4 2} x0 is the second column, x1 is the fifth
  558.  column, y is the third column, $\sigma_y$ is not specified.
  559.  
  560.  {\tt order 0 1 2 3 4 5} x0 is the first column in the file, x1
  561.  is the second column, y is the third column, $\sigma_y$ is the
  562.  fourth, $\sigma_{x0}$ is in the fifth column and is used in the
  563.  fit, $\sigma_{x1}$ is in the sixth column and is used in the fit.
  564.  
  565.  {\tt order 0 1 2 3 -1 -1} x0 is the first column in the file,
  566.  x1 is the second column, y is the third column, $\sigma_y$ is the
  567.  fourth, $\sigma_{x0}$ and $\sigma_{x1}$ are not used in the fit.
  568.  
  569. \subsection{ad}     {\bf Usage: } {\tt  ad columns rows}
  570.  
  571.         {\bf ad} re-allocates the internal data matrix.  It is 8
  572.  columns and 1024 rows by default.  You can have up to 23
  573.  columns and as many rows as memory allows.  Three rows are
  574.  used internally, and up to 20 rows can be used for data
  575.  from your input file.  The {\bf ad} command erases any data
  576.  currently in memory.
  577.  
  578.         {\bf Example: } {\tt  ad 11 4096}
  579.  
  580. \subsection{lf}     {\bf Usage: } {\tt  lf}
  581.  
  582.         {\bf lf} lists the functions available for fitting.
  583.  
  584. \subsection{gr}     {\bf Usage: } {\tt  gr flag} \\
  585.  
  586.         The {\bf gr} command turns the graphing on and off.  {\tt gr 0}
  587.  turns graphing off.  {\tt gr 1} turns graphing on.  Graphing is
  588.  on by default.
  589.  
  590. \subsection{fp}     {\bf Usage: } {\tt  fp flag} \\
  591.  
  592.         The {\bf fp} command turns the use of the {\em fitplot.exe}
  593.  program on and off.  The {\em fitplot.exe} program is a fast
  594.  plotting program which is used to plot the data and
  595.  attempted fit every iteration.  This is useful if you want
  596.  to see what the Levenberg-Marquardt algorithm is doing.
  597.  The use of fitplot.exe is off by default, although if there
  598.  are any command line arguments to {\em fit2.exe}, the use of
  599.  {\em fitplot.exe} is turned on.
  600.  
  601.  
  602. \subsection{plot}   {\bf Usage: } {\tt  plot} \\
  603.  
  604.         {\bf plot} plots the data and fitting function with the
  605.  current parameters.
  606.  
  607. \subsection{load}   {\bf Usage: } {\tt  load filename} \\
  608.  
  609.         {\bf load} loads and executes a gnuplot command file.
  610.  
  611. \subsection{set}    {\bf Usage: } {\tt  set gnuplot stuff} \\
  612.  
  613.         The entire {\bf set} command is sent to gnuplot.
  614.  
  615. \subsection{wi}     {\bf Usage: } {\tt  wi [one or more numbers]} \\
  616.  
  617.         {\bf wi} selects data windowing.  It is used if you want
  618.  to fit the data in a certain range of x values.  If {\bf wi} has
  619.  one argument, it turns windowing on and off.  {\tt wi 1} turns
  620.  windowing on.  {\tt wi 0} turns windowing off.  If {\bf wi} has more
  621.  than two arguments, windowing is turned on, and the
  622.  arguments are the minimum and maximum x values used in
  623.  fitting.  In other words, $\chi^2$ is computed only for
  624.  $xmin \le x \le xmax$.
  625.  
  626.  {\bf Examples:}
  627.  
  628.  {\tt wi 30 100} fit considers only x values between 30 and 100.
  629.  
  630.  {\tt wi 30 100 2 10} fit considers only x0 values between 30 
  631.  and 100 and x1 values between 2 and 10.
  632.  
  633. \subsection{ve}     {\bf Usage: } {\tt  ve flag} \\
  634.  
  635.         If flag = 0, the {\bf fi} command gives little output. If
  636.  flag = 1, the {\bf fi} command only gives the paramters every
  637.  iteration.  If flag = 2, the output is very verbose.
  638.  
  639. \subsection{noset}     {\bf Usage: } {\tt  noset flag} \\
  640.  
  641. If flag = 0, then fit2 issues the set command to
  642. gnuplot often for setting ranges, labels, titles, etc.
  643. If flag = 1, fit2 only sends gnuplot a set command when
  644. absolutely necessary for performing the requested operation.
  645.  
  646.  
  647. \subsection{pr}      {\bf Usage: } {\tt  pr flag} \\
  648.  
  649.         {\bf pr} plots residual errors.  If there is no flag or
  650.  flag = 1, yfit vs. y is plotted.  If flag = 2, (y-yfit) vs.
  651.  x is plotted.
  652.  
  653. \subsection{run or !}     {\bf Usage: } {\tt  run command line} \\
  654.  
  655.         {\bf ru} sends a command line to the default command
  656.  processor. It is used to run a program from within {\em fit2}.
  657.  
  658.         {\bf Example: } {\tt  run dir *.dat}
  659.  
  660. \subsection{gn}      {\bf Usage: } {\tt  gn gnuplot command} \\
  661.  
  662.         {\bf gn} sends a command to the gnuplot command processor.
  663.  It is used to execute gnuplot commands from within {\em fit2}.
  664.  You need to send a correct gnuplot command.  You will get
  665.  no error message if you do not.
  666.  
  667. \subsection{pa}      {\bf Usage: } {\tt  pa seconds} \\
  668.  
  669.  If $seconds < 1$, the program is paused until enter is hit.
  670.  
  671. \subsection{do}      {\bf Usage: } {\tt  do file} \\
  672.  
  673.  {\bf do} executes commands from a command file.  Lines 
  674.  beginning with \verb+#+ are
  675.  comments.  Blank lines are skipped.  All other lines are executed.
  676.  You cannot call one command file from another under OS/2.  It
  677.  might work under Unix.
  678.  
  679. \section{functions}
  680.  
  681.         There are several built in functions.  Other
  682.  functions can be added by adding them to the file
  683.  funclib2.c and recompiling.  See that file for details. 
  684.  The built in functions are: gauss, gaussc, ngauss, lorenz,
  685.  2lorenz, line, poly, nexp, and xyquad.
  686.  
  687. \subsection{gauss}
  688.  
  689.         The function gauss is a gaussian of the form:
  690. \[
  691.  f(x) = a_2e^{-(\frac{x-a_0}{a_1})^2}.
  692. \]
  693.  Fitting to this function
  694.  converges easily if your initial guesses are even close.
  695.  For gauss and most peak-type functions, your initial
  696.  guesses will probably converge if your function peaks are a
  697.  little shorter and wider than you data peaks.
  698.  
  699. \subsection{gaussc}
  700.  
  701.         The function gauss is a gaussian plus a constant.
  702. \[
  703.  f(x) = a_2e^{-(\frac{x-a_0}{a_1})^2} + a_3.
  704. \]
  705.  Fitting to this
  706.  function converges easily.
  707.  
  708. \subsection{ngauss}
  709.  
  710.         This function is a sum of gaussians plus a constant.
  711.  It uses a variable number of parameters.  The number you
  712.  want must be chosen when you select the function.  The
  713.  function has the form:
  714. \[
  715.  f(x) = a_{i+2}e^{-(\frac{x-a_{i}}{a_{i+1}})^2} + a_{n-1}.
  716. \]
  717.  You must choose $3n+1$ parameters, where n is the number of
  718.  gaussians you want. This function converges slowly for more
  719.  than 2 gaussians, but it usually does converge.  If the
  720.  peaks in your data are separated by several widths, you
  721.  should window the data and fit the peaks separately first,
  722.  and then do a final fit on the whole data set.
  723.  
  724. \subsection{lorenz}
  725.  
  726.         This is a lorenzian function of the form:
  727. \[
  728.  f(x) = \frac{a_2 a_1}{4(x-a_0)^2 + a_1}.
  729. \]
  730.  I chose not to use the
  731.  usual form, because I thought making the form simple in
  732.  regards to the parameters might make for more robust
  733.  fitting.  You have to think to eyeball the initial
  734.  paremeters though.  If your data is a lorenzian, it will 
  735.  converge without much trouble.  If your data is not really
  736.  a lorenzian you may have trouble.  The gaussian is a
  737.  better choice to fit peaks that are not well characterized
  738.  by a particular function.
  739.  
  740. \subsection{2lorenz}
  741.  
  742.         This is the sum of two lorenzians and it has the
  743.  form: 
  744. \[
  745.  f(x) = \frac{a_2 a_1}{4(x-a_0)^2 + a_1} + \frac{a_5 a_4}{4(x-a_3)^2 + a_4}.
  746. \]
  747.  It sometimes takes some effort to get a fit to this
  748.  function to converge.
  749.  
  750. \subsection{line}
  751.  
  752. Piece of cake:
  753. \[
  754. f(x) = a_0 + a_1x.
  755. \]
  756.  
  757. \subsection{poly}
  758.  
  759.  This function is a polynomial of the form:
  760. \[
  761. f(x) = \sum a_ix^i.
  762. \]
  763.  Decent initial guesses and
  764.  fourth order or less converge easily and quickly.  Higher
  765.  orders might take some work.  Using {\bf li} to obtain initial
  766.  guesses and {\bf fi }for final parameter values is best for
  767.  polynomials higher than fourth order.
  768.  
  769. \subsection{nexp}
  770.  
  771.         This function is the sum of decaying exponentials. 
  772.  It has  the form:
  773. \[
  774.  f(x) = \sum \Theta (a_i)a_{i+2} e^{\frac{x-a_i}{a_{i+1}}}
  775.  + a_{n-1},
  776. \]
  777.  where $\Theta (a_i) = 0$ if $x < a$, and $\Theta (a_i) = 1$ if
  778.  $x \geq a$.  You need to tell the program how many parameters
  779.  you want.  4 parameters gives you one exponential, 7 gives
  780.  you two, etc.  If you know the offset, you should
  781.  initialize properly and not vary that parameter.  For 
  782.  example, most decaying exponentials are triggered by some
  783.  event. If you know the time of the event, don't vary that
  784.  parameter.
  785.  
  786. \subsection{xyquad}
  787.  
  788.  This is a two dimensional quadratic of the form:
  789. \[
  790.  f(u,v) = a_0 + a_1u + a_2v + a_3u^2 + a_4v^2 + a_5uv.
  791. \]
  792.  u and v are used instead of x and y or x0 and x1, because
  793.  gnuplot needs to plot the data parametrically.  The linear
  794.  fitting  algorithm works pretty well, but I recommend the
  795.  result be checked with a few iterations of the L-M
  796.  algorithm, for example, issue the command, {\tt fi 5} after the
  797.  {\bf li} command.
  798.  
  799. \subsection{sincos}
  800.  This function is a sum of sines and cosines of the form:
  801. \[
  802. f(x) = a_0 + a_i\sin{a_{i+1}x} + a_{i+2}\cos{a_{i+3}x}.
  803. \]
  804.  You need good initial guess to get this fitting function to
  805.  converge quickly, if at all.  You will do well to get the
  806.  frequencies close.  If the zeros of your fitting function
  807.  with your initial parameters are close to the zeroes of
  808.  your data, you have a good chance of converging.  For
  809.  special cases like Fourier series, you probably want a
  810.  specialized function.  You should take a Fourier transform
  811.  if that is what you really want.
  812.  
  813. \subsection{conic}
  814.  
  815.         conic does not work very well and I do not reccomend
  816.  its use.
  817.  
  818. \section{Multiple Data Sets}
  819.  
  820.         Let's say that you have several different data sets
  821.  that you want to fit to functions which share some common
  822.  parameters. You can simulate the functionality of multiple
  823.  data sets.
  824.  
  825.  Put all of your data in the same file , with the same
  826.  columns being used for x0, x1 . . . xn, y, any sigma's etc.
  827.  Add an extra row to the file containing a number to
  828.  uniquely identify the data set.  Define your function for 
  829.  n+1 independent variables, and assign the extra row to be
  830.  x(n+1).  The (n+1)th independent variable will be passed to
  831.  your fitting function.  Use it to decide which data set you
  832.  are using and return the appropriate function value and
  833.  derivatives.
  834.  
  835.  Sure, it's a kludge, but it's better than nothing for now.
  836.  
  837. \section{gnuplot}
  838.  
  839.         Gnuplot is is an interactive plotting program. To
  840.  use the graphing capability of the fit program, you must
  841.  have the gnuplot program correctly installed in your system
  842.  and it must be in a directory in the current path.
  843.  
  844. \end{document}
  845.